home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / sos3-2.lha / include / err.h < prev    next >
C/C++ Source or Header  |  1992-01-23  |  3KB  |  73 lines

  1. /* --------------------------------------------------------------------------
  2.  * Copyright 1992 by Forschungszentrum Informatik (FZI)
  3.  *
  4.  * You can use and distribute this software under the terms of the licence
  5.  * you should have received along with this program.
  6.  * If not or if you want additional information, write to
  7.  * Forschungszentrum Informatik, "STONE", Haid-und-Neu-Strasse 10-14,
  8.  * D-7500 Karlsruhe 1, Germany.
  9.  * --------------------------------------------------------------------------
  10.  */
  11. #ifndef ERRH
  12. #define ERRH 1
  13.  
  14. // The following definitions cope with a bug in the AT&T libraries on a sun:
  15. // Due to the way C header files are used within C++ header files, a line
  16. //    #pragma unknown_control_flow(______sigsetjmp,______setjmp,_______setjmp)
  17. // will appear in the output of cfront (an additional line dealing with
  18. // register allocation will appear on a sun3).
  19. // In the subsequent C compiler run this line causes three warnings (unknown
  20. // functions) and an occasional error at optimization level O2 and higher.
  21. // The definitions will just assure that a known function is named in the
  22. // pragma directives.
  23.  
  24. #if defined(ATT) && defined(sun) && !defined(______sigsetjmp)
  25. static void __dummy_for_pragmas__(){}
  26.  
  27. #define ______sigsetjmp __dummy_for_pragmas____Fv
  28. #define ______setjmp    __dummy_for_pragmas____Fv
  29. #define _______setjmp   __dummy_for_pragmas____Fv
  30. #endif
  31.  
  32. #include <setjmp.h>
  33.  
  34. enum err_class { err_SYS, err_USE, err_WNG };
  35. typedef char* err_msg;
  36.  
  37. extern const err_msg err_NOT_IMPLEMENTED;
  38. extern const err_msg err_ABSTRACT_METHOD;
  39. extern const err_msg err_ASSERTION_FAILED;
  40.  
  41. extern void    err_raise (err_class, err_msg, char* where = 0, int copy = 1);
  42.  
  43. #define err_raise_not_implemented(m) \
  44.         err_raise(err_SYS,err_NOT_IMPLEMENTED,m,FALSE);
  45. #define err_raise_abstract_method(m) \
  46.         err_raise(err_SYS,err_ABSTRACT_METHOD,m,FALSE);
  47.  
  48. #if ERR_NO_ASSERT
  49. #define err_assert(b,w)
  50. #else
  51. #define err_assert(b,w) ((b)?1:(err_raise(err_SYS,err_ASSERTION_FAILED,w,0),0))
  52. #endif
  53.  
  54. extern void     (*err_output_handler) ();
  55.  
  56. extern int    err_occurred (err_class);
  57. extern void     err_reset ();
  58.  
  59. extern err_class err_last_class ();
  60. extern err_msg   err_last_raised ();
  61. extern char*     err_last_origin ();
  62.  
  63. extern void err_push_env();
  64. extern void err_pop_env();
  65.  
  66. extern struct err_env_stc {sigjmp_buf env; err_env_stc *next;} *err_env_stack;
  67.  
  68. #define err_block     if (err_push_env(),!sigsetjmp(err_env_stack->env,0)) {
  69. #define err_exception err_pop_env(); } else {
  70. #define err_block_end err_pop_env(); }
  71.  
  72. #endif ERRH
  73.